home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / misc / pcduo102.zip / @PCDUO.ZIP / SETUP.MS_ / SETUP.MS
Text File  |  1994-09-20  |  14KB  |  394 lines

  1. '**************************************************************************
  2. '*                         MSSetup Install Script
  3. '**************************************************************************
  4.  
  5. ''$DEFINE DEBUG  ''Define for script development/debugging
  6.  
  7. '$INCLUDE 'setupapi.inc'
  8. '$INCLUDE 'msdetect.inc'
  9.  
  10. ''Dialog ID's
  11. CONST WELCOME       = 100
  12. CONST ASKQUIT       = 200
  13. CONST DESTPATH      = 300
  14. CONST EXITFAILURE   = 400
  15. CONST EXITQUIT      = 600
  16. CONST EXITSUCCESS   = 700
  17. CONST PROFILES      = 800
  18. CONST INTROHELP     = 900
  19. CONST DIRHELP       = 1000
  20. ''CONST RECONFIG      = 1100
  21. CONST CORRUPTED     = 1200
  22. CONST NO_NAME       = 1210
  23. CONST SLAVE_OR_CTL  = 1300
  24. CONST WIN_OR_DOS    = 1400
  25. CONST NB_OR_IPX     = 1500
  26. CONST DEBUGMSG      = 1600
  27. CONST INIERROR      = 1700
  28. CONST BADPATH       = 6400
  29. CONST BADAUTO       = 7900
  30. CONST BADWINVERSION = 8000
  31. CONST OVERWRITE     = 8100
  32.  
  33. ''Bitmap ID
  34. CONST LOGO = 1
  35.  
  36. ''Options$
  37. CONST SLAVE         = 1
  38. CONST CONTROL       = 2
  39. CONST WINDOWS       = 3
  40. CONST DOS           = 4
  41. CONST NETBIOS       = 5
  42. CONST IPX           = 6
  43. CONST REMOTE        = 7
  44. CONST BRIDGE        = 8
  45.  
  46. GLOBAL PRODUCT$     ''Product name
  47. GLOBAL TLA$         ''Product abbreviation
  48. GLOBAL DIR$         ''Install directory
  49. GLOBAL DEST$        ''Default destination directory.
  50. GLOBAL MNAME$       ''Machine name.
  51. GLOBAL OPTIONS$     ''What to install
  52. GLOBAL MSG$         ''See DEBUGMSG:
  53. GLOBAL CUIDLL$      ''Custom user interface dll
  54. GLOBAL HELPPROC$    ''Help dialog procedure
  55. GLOBAL DLG%         ''Dialog ID
  56. GLOBAL COPY%        ''Copy files?
  57.  
  58. DECLARE SUB Install
  59. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  60. DECLARE SUB FTerminateWinHelp LIB "setup.dll"
  61. DECLARE FUNCTION FUpdateIniFiles LIB "setup.dll" (szPath$, szOptions$) AS INTEGER
  62. DECLARE FUNCTION FGetString LIB "setup.dll" (resid$) AS INTEGER
  63. '$ifndef DEBUG
  64. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  65. '$endif
  66.  
  67. INIT:
  68.  
  69. '$INCLUDE 'vendor.inc'                  '' Sets up PRODUCT$, TLA$, DIR$
  70.  
  71.     SetSymbolValue "Product", PRODUCT$
  72.     SetSymbolValue "DIR", DIR$
  73.     SetSymbolValue "TLA", TLA$
  74.     CUIDLL$ = "setup.dll"
  75.     HELPPROC$ = "FHelpDlgProc"
  76.  
  77.     SetBitmap CUIDLL$, LOGO
  78.     SetTitle PRODUCT$ + " Setup"
  79.     SetRestartDir GetWindowsDir
  80.  
  81.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  82.     IF szInf$ = "" THEN
  83.         szInf$ = GetSymbolValue("STF_CWDDIR") + "SETUP.INF"
  84.     END IF
  85.     ReadInfFile szInf$
  86.  
  87. '$INCLUDE 'defaults.inc'                '' Sets up installation defaults
  88.  
  89.     i% = SetSizeCheckMode(scmOff)
  90. '$IFDEF DEBUG
  91. ''  i% = SetSizeCheckMode(scmOnIgnore)  '' could use scmOff; def = scmOnFatal
  92.     WinDrive$ = MID$(GetWindowsDir, 1, 1)
  93.     IF IsDriveValid(WinDrive$) = 0 THEN
  94.         i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  95.         GOTO QUIT
  96.     END IF
  97. '$ENDIF ''DEBUG
  98.  
  99. WELCOME:
  100.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", INTROHELP, HELPPROC$)
  101.     IF sz$ <> "CONTINUE" THEN
  102.         GOSUB ASKQUIT
  103.         GOTO WELCOME
  104.     END IF
  105.     UIPop 1
  106.  
  107. GETPATH:
  108.     SetSymbolValue "EditTextIn", DEST$
  109.     SetSymbolValue "EditFocus", "END"
  110. GETPATHL1:
  111.     SetSymbolValue "EditText2", MNAME$
  112.     SetSymbolValue "OptionsIn", OPTIONS$
  113.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", DIRHELP, HELPPROC$)
  114.     DEST$ = GetSymbolValue("EditTextOut")
  115.     IF DEST$ <> GetSymbolValue("EditTextIn") THEN
  116.         COPY% = 1                   '' Force copy if directory changed
  117.     END IF
  118.     MNAME$ = GetSymbolValue ("EditText2")
  119.     OPTIONS$ = GetSymbolValue ("OptionsOut")
  120.     SetSymbolValue "OptionsIn", ""
  121.  
  122.     IF sz$ = "CONTINUE" THEN
  123.         IF (MNAME$ = "" OR INSTR (MNAME$, " ") <> 0) THEN
  124.             DLG% = NO_NAME
  125.             GOSUB ERRMSG
  126.             GOTO GETPATHL1
  127.         END IF
  128.         IF (MID$ (OPTIONS$, SLAVE, 1) = "0") AND (MID$ (OPTIONS$, CONTROL, 1) = "0" AND MID$ (OPTIONS$, REMOTE, 1) = "0") AND (MID$ (OPTIONS$, BRIDGE, 1) = "0") THEN
  129.             DLG% = SLAVE_OR_CTL
  130.             GOSUB ERRMSG
  131.             GOTO GETPATHL1
  132.         END IF
  133.         IF (MID$ (OPTIONS$, WINDOWS, 1) = "0") AND (MID$ (OPTIONS$, DOS, 1) = "0") THEN
  134.             DLG% = WIN_OR_DOS
  135.             GOSUB ERRMSG
  136.             GOTO GETPATHL1
  137.         END IF
  138.         IF (MID$ (OPTIONS$, NETBIOS, 1) = "0") AND (MID$ (OPTIONS$, IPX, 1) = "0") THEN
  139.             DLG% = NB_OR_IPX
  140.             GOSUB ERRMSG
  141.             GOTO GETPATHL1
  142.         END IF
  143.         IF FValidFATDir(DEST$) = 0 THEN
  144.             DLG% = BADPATH
  145.             GOSUB ERRMSG
  146.             GOTO GETPATHL1
  147.         END IF
  148.         IF COPY% <> 0 THEN
  149.             CreateDir DEST$, cmoNone    ''must create network dir before using IsDirWritable
  150.             IF IsDirWritable(DEST$) = 0 THEN
  151.                 DLG% = BADPATH
  152.                 GOSUB ERRMSG
  153.                 GOTO GETPATHL1
  154.             END IF
  155.             IF DoesFileExist(MAKEPATH(DEST$, "README.TXT"), femExists) THEN
  156.                 sz$ = UIStartDlg(CUIDLL$, OVERWRITE, "FInfoDlgProc", 0, "")
  157.                 UIPop 1
  158.                 IF sz$ = "EXIT" THEN
  159.                     UIPopAll
  160.                     ERROR STFQUIT
  161.                 ELSEIF sz$ = "CANCEL" THEN
  162.                     GOTO GETPATHL1
  163.                 END IF
  164.             END IF
  165.         END IF
  166.     ELSEIF sz$ = "BACK" THEN
  167.         UIPop 1
  168.         GOTO WELCOME
  169.     ELSE
  170.         GOSUB ASKQUIT
  171.         GOTO GETPATH
  172.     END IF
  173.  
  174.     UIPop 1
  175.     Install
  176.  
  177. QUIT:
  178.     ON ERROR GOTO ERRQUIT
  179.  
  180.     IF ERR <> 0 THEN
  181.         IF ERR = STFQUIT THEN
  182.             sz$ = UIStartDlg(CUIDLL$, EXITQUIT, "FInfoDlgProc", 0, "")
  183.         ELSE
  184.             sz$ = UIStartDlg(CUIDLL$, EXITFAILURE, "FInfoDlgProc", 0, "")
  185.         END IF
  186.         END
  187.     END IF
  188.  
  189.     IF TLA$ = "PCD" THEN
  190.         SetSymbolValue "EditTextIn", "cd " + DEST$
  191.     ELSE
  192.         IF (MID$ (OPTIONS$, NETBIOS, 1) = "1") THEN
  193.             SetSymbolValue "EditTextIn", MAKEPATH$ (DEST$, "SLAVE") + " " + MNAME$
  194.         ELSE
  195.             SetSymbolValue "EditTextIn", MAKEPATH$ (DEST$, "IPSLAVE") + " " + MNAME$
  196.         END IF
  197.     END IF
  198.     SetSymbolValue "EditFocus", "END"
  199.     sz$ = UIStartDlg(CUIDLL$, EXITSUCCESS, "FEditDlgProc", 0, "")
  200.     END
  201.  
  202. ERRQUIT:
  203.     sz$ = UIStartDlg(CUIDLL$, CORRUPTED, "FInfoDlgProc", 0, "")
  204.     END
  205.  
  206. ERRMSG:
  207.     sz$ = UIStartDlg(CUIDLL$, DLG%, "FInfoDlgProc", 0, "")
  208.     UIPop 1
  209.     RETURN
  210.  
  211. ASKQUIT:
  212.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  213.     IF sz$ = "EXIT" THEN
  214.         UIPopAll
  215.         ERROR STFQUIT
  216.     END IF
  217.     UIPop 1
  218.     RETURN
  219.  
  220. DEBUGMSG:
  221.     MSG_SAVE$ = GetSymbolValue ("EditTextIn")
  222.     SetSymbolValue "EditTextIn", MSG$
  223.     MSG$ = UIStartDlg(CUIDLL$, DEBUGMSG, "FEditDlgProc", 0, "")
  224.     SetSymbolValue "EditTextIn", MSG_SAVE$
  225.     UIPop 1
  226.     RETURN
  227.  
  228. '**
  229. '** Purpose:
  230. '**     Builds the copy list and performs all installation operations.
  231. '** Arguments:
  232. '**     none.
  233. '** Returns:
  234. '**     none.
  235. '*************************************************************************
  236.  
  237. SUB Install STATIC
  238.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  239.  
  240.     IF (COPY% <> 0) THEN
  241.         CreateDir DEST$, cmoNone
  242.  
  243.         OpenLogFile MakePath(DEST$, "LOGFILE.OUT"), 0
  244.         WriteToLogFile ""
  245.         WriteToLogFile "User chose as destination directory: " + DEST$
  246.         WriteToLogFile ""
  247.         WriteToLogFile "May have had to create the directory: " + DEST$
  248.         WriteToLogFile ""
  249.  
  250.         AddSectionFilesToCopyList "Files", SrcDir$, DEST$
  251.  
  252.         IF (MID$ (OPTIONS$, SLAVE, 1) = "1") THEN
  253.             AddSectionFilesToCopyList "SLAVE", SrcDir$, DEST$
  254.             IF (MID$ (OPTIONS$, WINDOWS, 1) = "1") THEN
  255.                 AddSectionFilesToCopyList "SLAVE_WIN", SrcDir$, DEST$
  256.             END IF
  257.             IF (MID$ (OPTIONS$, IPX, 1) = "1") THEN
  258.                 AddSectionFilesToCopyList "SLAVE_IPX", SrcDir$, DEST$
  259.             END IF
  260.             IF (MID$ (OPTIONS$, NETBIOS, 1) = "1") THEN
  261.                 AddSectionFilesToCopyList "SLAVE_NB", SrcDir$, DEST$
  262.             END IF
  263.         END IF
  264.  
  265.         IF (MID$ (OPTIONS$, CONTROL, 1) = "1") THEN
  266.             AddSectionFilesToCopyList "CTL", SrcDir$, DEST$
  267.             IF (MID$ (OPTIONS$, WINDOWS, 1) = "1") THEN
  268.                 IF (MID$ (OPTIONS$, NETBIOS, 1) = "1") THEN
  269.                     AddSectionFilesToCopyList "CTL_WIN_NB", SrcDir$, DEST$
  270.                 END IF
  271.                 IF (MID$ (OPTIONS$, IPX, 1) = "1") THEN
  272.                     AddSectionFilesToCopyList "CTL_WIN_IPX", SrcDir$, DEST$
  273.                 END IF
  274.             END IF
  275.             IF (MID$ (OPTIONS$, DOS, 1) = "1") THEN
  276.                 AddSectionFilesToCopyList "CTL_DOS", SrcDir$, DEST$
  277.                 IF (MID$ (OPTIONS$, NETBIOS, 1) = "1") THEN
  278.                     AddSectionFilesToCopyList "CTL_DOS_NB", SrcDir$, DEST$
  279.                 END IF
  280.                 IF (MID$ (OPTIONS$, IPX, 1) = "1") THEN
  281.                     AddSectionFilesToCopyList "CTL_DOS_IPX", SrcDir$, DEST$
  282.                 END IF
  283.             END IF
  284.         END IF
  285.  
  286.         IF (MID$ (OPTIONS$, WINDOWS, 1) = "1") THEN
  287.             AddSectionFilesToCopyList "WINDOWS", SrcDir$, DEST$
  288.         END IF
  289.  
  290.         IF (MID$ (OPTIONS$, REMOTE, 1) = "1") THEN
  291.             IF (MID$ (OPTIONS$, IPX, 1) = "1") THEN
  292.                 AddSectionFilesToCopyList "REMOTE_IPX", SrcDir$, DEST$
  293.             END IF
  294.             IF (MID$ (OPTIONS$, NETBIOS, 1) = "1") THEN
  295.                 AddSectionFilesToCopyList "REMOTE_NB", SrcDir$, DEST$
  296.             END IF
  297.         END IF
  298.  
  299.         IF (MID$ (OPTIONS$, BRIDGE, 1) = "1") THEN
  300.             AddSectionFilesToCopyList "BRIDGE", SrcDir$, DEST$
  301.             IF (MID$ (OPTIONS$, IPX, 1) = "1") THEN
  302.                 AddSectionFilesToCopyList "BRIDGE_IPX", SrcDir$, DEST$
  303.             END IF
  304.             IF (MID$ (OPTIONS$, NETBIOS, 1) = "1") THEN
  305.                 AddSectionFilesToCopyList "BRIDGE_NB", SrcDir$, DEST$
  306.             END IF
  307.         END IF
  308.  
  309.         CopyFilesInCopyList
  310.     END IF
  311.  
  312.     IF (MID$ (OPTIONS$, WINDOWS, 1) = "1") THEN
  313.         CreateProgmanGroup PRODUCT$, "", cmoNone
  314.         ShowProgmanGroup  PRODUCT$, 1, cmoOverwrite
  315.         i% = FGetString ("256")                 '' Read Me
  316.         item$ = GetSymbolValue ("RES_STR")
  317.         CreateProgmanItem PRODUCT$, item$, "NOTEPAD " + MakePath(DEST$,"README.TXT"), "", cmoOverwrite
  318.         IF (MID$ (OPTIONS$, CONTROL, 1) = "1") THEN
  319.             IF (MID$ (OPTIONS$, IPX, 1) = "1" AND MID$ (OPTIONS$, NETBIOS, 1) = "1") THEN
  320.                 i% = FGetString ("257")         '' NetBIOS Control
  321.                 item$ = GetSymbolValue ("RES_STR")
  322.                 CreateProgmanItem PRODUCT$, PRODUCT$ + item$, MakePath(DEST$,"WCONTROL") + " " + MNAME$, "", cmoOverwrite
  323.                 i% = FGetString ("258")         '' IPX Control
  324.                 item$ = GetSymbolValue ("RES_STR")
  325.                 CreateProgmanItem PRODUCT$, PRODUCT$ + item$, MakePath(DEST$,"WIPCNTRL") + " " + MNAME$, "", cmoOverwrite
  326.             ELSE
  327.                 i% = FGetString ("259")         '' Control
  328.                 item$ = GetSymbolValue ("RES_STR")
  329.                 IF (MID$ (OPTIONS$, IPX, 1) = "1") THEN
  330.                     CreateProgmanItem PRODUCT$, PRODUCT$ + item$, MakePath(DEST$,"WIPCNTRL") + " " + MNAME$, "", cmoOverwrite
  331.                 END IF
  332.                 IF (MID$ (OPTIONS$, NETBIOS, 1) = "1") THEN
  333.                     CreateProgmanItem PRODUCT$, PRODUCT$ + item$, MakePath(DEST$,"WCONTROL") + " " + MNAME$, "", cmoOverwrite
  334.                 END IF
  335.             END IF
  336.         END IF
  337.         IF (MID$ (OPTIONS$, SLAVE, 1) = "1") THEN
  338.             i% = FGetString ("260")             '' Slave
  339.             item$ = GetSymbolValue ("RES_STR")
  340.             CreateProgmanItem PRODUCT$, PRODUCT$ + item$, MakePath(DEST$,"WSLAVE"), "", cmoOverwrite
  341.             i% = FGetString ("261")             '' Receive DOS Show
  342.             item$ = GetSymbolValue ("RES_STR")
  343.             CreateProgmanItem PRODUCT$, item$, "command /c pause >nul", "", cmoOverwrite
  344.             i% = FGetString ("262")             '' CalcPSW
  345.             item$ = GetSymbolValue ("RES_STR")
  346.             CreateProgmanItem PRODUCT$, item$, MakePath(DEST$,"CALCPSW"), "", cmoOverwrite
  347.             i% = FGetString ("263")             '' Reinstall after Windows Setup
  348.             item$ = GetSymbolValue ("RES_STR")
  349.             CreateProgmanItem PRODUCT$, item$, MakePath(DEST$,"WINSTALL"), "", cmoOverwrite
  350.         END IF
  351.  
  352.         i% = FGetString ("264")                 '' Uninstall
  353.         item$ = GetSymbolValue ("RES_STR")
  354.         CreateProgmanItem PRODUCT$, item$, MakePath(DEST$,"WINSTALL /U"), "", cmoOverwrite
  355.  
  356.         CreateProgmanItem PRODUCT$, PRODUCT$ + " Help", "WINHELP " + MAKEPATH(DEST$,TLA$+".HLP"), "", cmoOverwrite
  357.  
  358.         i% = FUpdateIniFiles (DEST$, OPTIONS$)
  359.         IF (i% = 0) THEN
  360.             sz$ = UIStartDlg(CUIDLL$, INIERROR, "FInfoDlgProc", 0, "")
  361.             UIPop 1
  362.             ERROR STFQUIT
  363.         END IF
  364.     END IF
  365.  
  366.     IF (COPY% <> 0) THEN
  367.         CloseLogFile
  368.         RemoveFile MakePath(DEST$, "LOGFILE.OUT"), cmoNone
  369.     END IF
  370. END SUB
  371.  
  372. '**
  373. '** Purpose:
  374. '**     Appends a file name to the end of a directory path,
  375. '**     inserting a backslash character as needed.
  376. '** Arguments:
  377. '**     szDir$  - full directory path (with optional ending "\")
  378. '**     szFile$ - filename to append to directory
  379. '** Returns:
  380. '**     Resulting fully qualified path name.
  381. '*************************************************************************
  382.  
  383. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  384.     IF szDir$ = "" THEN
  385.         MakePath = szFile$
  386.     ELSEIF szFile$ = "" THEN
  387.         MakePath = szDir$
  388.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  389.         MakePath = szDir$ + szFile$
  390.     ELSE
  391.         MakePath = szDir$ + "\" + szFile$
  392.     END IF
  393. END FUNCTION
  394.